<?php

namespace App\Http\Controllers\Api;

use App\Models\MemberGroup;
use App\Models\Shop\Order;
use App\Models\User;
use EasyWeChat\Foundation\Application;
use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class WechatController extends Controller
{
    public function postNotify()
    {
        $app = new Application(config('wechat'));
        $response = $app->payment->handleNotify(function($notify, $successful){
            // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
            $order = Order::where('orderNumber', $notify->out_trade_no)->first();
            if (!$order) { // 如果订单不存在
                return 'Order not exist.'; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
            }
            // 如果订单存在
            // 检查订单是否已经更新过支付状态
            if ($order->payState == 1) { // 假设订单字段“支付时间”不为空代表已经支付
                return true; // 已经支付成功了就不再更新了
            }
            // 用户是否支付成功
            if ($successful) {
                $this->forSuccess($order);
                $this->userLv($order);
                // 不是已经支付状态则修改为已经支付状态
                $order->payState = 1; // 更新支付时间为当前时间
            }
            $order->save(); // 保存订单
            return true; // 返回处理完成
        });
        return $response;
    }

    /**
     * 商品购买量增加
     * @param $order
     */
    private function forSuccess($order)
    {
        try {
            $orderList = json_decode($order->orderList) ? json_decode($order->orderList) : $order->orderList;
            if(is_array($orderList))
            {
                foreach ($orderList as $v)
                {
                    if(isset($v->id) && is_numeric($v->num))
                        DB::table('shop_store_goods')->where('id', $v->id)->increment('hit', $v->num);
                }
            }
        } catch (\Exception $e)
        {
        }
    }

    /**
     * 计算用户等级提升
     * @param $order
     */
    private function userLv($order)
    {
        $integral = $order->amount;
        try {
            //获取用户信息
            $user = User::find($order->uid);
            //获取分组规则
            $userGroup = MemberGroup::orderBy('requireIntegral', 'asc')->get()->keyBy('id');
            $groupID = $user->groupID;
            //移除这块后
            $integral = $userGroup[$groupID]->discount ? $integral / ($userGroup[$groupID]->discount/10) : $integral;
            foreach ($userGroup as $v)
            {
                if($user->integral + $integral >= $v->requireIntegral)
                {
                    if($userGroup[$groupID]->lv < $v->lv)
                        $groupID = $v->id;
                }
            }

            $user->integral = round($integral + $user->integral,1);
            $user->groupID = $groupID;
            $user->save();
        } catch (\Exception $e)
        {}
    }
}
